﻿using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Persistencia_y_capa_de_negocio;

namespace clonegame
{
    public partial class formularioJuego : UserControl
    {
        /// <summary>
        ///  Instancia del juego.
        /// </summary>
        /// 
        private static readonly formularioJuego instancia = new formularioJuego();
        public static formularioJuego Instancia
        {
            get { return instancia; }
        }

        private string estado;
        public string Estado
        {
            get { return estado; }
            set { estado = value; }
        }

        private string path;

        /// <summary>
        /// Entidad de negocio juego.
        /// </summary>
        private ENJuego juego;

        /// <summary>
        /// Constructor.
        /// </summary>
        public formularioJuego()
        {
            InitializeComponent();

            estado = "editar";

            // Obtene la única instancia de la clase.
            juego = CADJuego.Instancia.devuelveJuego();
           
            // Cargamos los datos en el formulario.
            tbNombreJuego.Text = juego.Nombre.Trim();
            tbDescripcionJuego.Text = juego.Descripcion.Trim();
            
            // Obtenemos la ruta relativa a la aplicación.
            string destino = Application.ExecutablePath;
            destino = destino.Remove(destino.LastIndexOf(@"\bin\"));
            destino += @"\imagenes\juego";
            destino += @"\" + juego.RutaLog.Trim() + ".png";

            // Cargamos la imagen.
            try
            {
                path = destino;
                picImagen.ImageLocation = destino;
            }
            catch
            {
                picImagen.ImageLocation = "";
            }
            
        }

        /// <summary>
        /// Edita los atributos del juego.
        /// </summary>
        /// <param name="sender">Objeto que envía la acción.</param>
        /// <param name="e">Argumentos.</param>
        private void btEditarJuego_Click(object sender, EventArgs e)
        {
            estado = "editar";

            bool err = false;
            string error = "Faltan datos en : ";

            if (tbNombreJuego.Text == "")
            {
                error += "Nombre ";
                err = true;
            }

            if (tbDescripcionJuego.Text == "")
            {
                error += "Descripción ";
                err = true;
            }
            if ( picImagen.ImageLocation == "")
            {
                err = true;
                error += "Imagen ";
            }

            if (!err)
            {
                epJuego.Clear();
                juego.Nombre = tbNombreJuego.Text.ToString();
                juego.Descripcion = tbDescripcionJuego.Text.ToString();

                string origen = path;
                string destino = Application.ExecutablePath;
                destino = destino.Remove(destino.LastIndexOf(@"\bin\"));
                destino += @"\imagenes\juego";
                destino += @"\" + tbNombreJuego.Text + ".png";
                
                if (origen != destino)
                {
                    try
                    {
                        picImagen.Image.Dispose();

                        System.GC.Collect();
                        System.GC.WaitForPendingFinalizers();

                        File.Delete(destino);
                    }
                    catch
                    {
                    }
                    File.Copy(origen, destino);
                    picImagen.Image = System.Drawing.Image.FromFile(destino);
                }
                juego.RutaLog = tbNombreJuego.Text;
                CADJuego.Instancia.ActualizaJuego(juego);

                MessageBox.Show("Las características del juego se han modificado correctamente");
            }
            else
            {
                epJuego.SetError(btEditarJuego, error);
                epJuego.SetIconAlignment(btEditarJuego, ErrorIconAlignment.MiddleLeft);
            }
        }

        /// <summary>
        /// Restaura los campos del formulario.
        /// </summary>
        /// <param name="sender">Objeto que envía la acción.</param>
        /// <param name="e">Argumentos.</param>
        private void btRestaurar_Click(object sender, EventArgs e)
        {
            tbNombreJuego.Text = juego.Nombre.Trim();
            tbDescripcionJuego.Text = juego.Descripcion.Trim();

            string destino = Application.ExecutablePath;
            destino = destino.Remove(destino.LastIndexOf(@"\bin\"));
            destino += @"\imagenes\juego";
            destino += @"\" + juego.RutaLog.Trim() + ".png";

            picImagen.Image = System.Drawing.Image.FromFile(destino);
        }

        /// <summary>
        /// Examina una imagen para el logotipo del juego.
        /// </summary>
        /// <param name="sender">Objeto que envía la acción.</param>
        /// <param name="e">Argumentos.</param>
        private void btExaminar_Click(object sender, EventArgs e)
        {
            estado = "editando";
            OpenFileDialog imagen = new OpenFileDialog();
            imagen.Filter = "png (*.png)|*.png";
            picImagen.SizeMode = PictureBoxSizeMode.StretchImage;

            if (imagen.ShowDialog() == DialogResult.OK)
            {
                // Hemos seleccionado una imagen.
                // Ahora queremos copiarla.

                string origen = imagen.FileName;
                path = origen; // MessageBox.Show(imagen.FileName);
                string destino = Application.ExecutablePath;
                destino = destino.Remove(destino.LastIndexOf(@"\bin\"));
                destino += @"\imagenes\juego";
                destino += @"\" + tbNombreJuego.Text + ".png";
                //File.Copy(origen, destino);
                
                picImagen.ImageLocation = origen;

                // MessageBox.Show(destino);
            }
        }

        private void EstEditando(object sender, KeyEventArgs e)
        {
            estado = "editando";
        }
    }
}
